/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package modelo;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.JOptionPane;

/**
 *
 * @author ThaisRamir
 */
public class AtorDAO {
    
    private Connection conn;  //cria uma variavel que recebera um objeto da classe Connection
    private Ator ator;
    private String Nom_ator;

    /**
     * <p>Este e o metodo construtor da classe. Ao construir uma inst�ncia da classe ContatoFilmeDAO ele conectata a aplica��o com o banco de dados. Para isso,
 ele chama o metodo getConnection da classe Conexao.<p>
     */
    public AtorDAO(){
        if( (conn = new Conexao().getConnection())== null ){
            JOptionPane.showMessageDialog(null, "N�o conectou com banco de dados.");
        }
    }
    
    /**
     
     * @param ator
     */
    public void inserir(Ator ator) {
        String sql = "INSERT INTO ator " +            //aqui estamos criando uma String com o comando SQL.
        "(nom_ator)" +
        " VALUES (?)";
        try 
            (PreparedStatement pstmt = this.conn.prepareStatement(sql)) //utilizamos um objeto PreparedStatement para realizar a operacao
        {
                pstmt.setString(1,ator.getNome_ator());   //chamamos o metodo apropriado do objeto PreparedStatement para copiar os dados do objeto contato
                
                if(!pstmt.execute()){ //executa o INSERT
                    JOptionPane.showMessageDialog(null, "Ator inserido com sucesso!");
                }
                
                pstmt.close();  //n�o podemos esquecer de liberar este recurso
                    
        } catch (SQLException ex){ //se a conex�o falhar, emite a mensagem abaixo
            System.out.println("SQLException em adicionar!!!" + "Erro detectado: " + ex.getMessage());
        }
        //como utiliza try-with-resource o recurso stmt � fechado automaticamente
    }
    
    
    /**
    
     * @param id 
     */
    public void excluir(int cod_ator){
        String sql = "DELETE FROM ator WHERE id = " + cod_ator;  //aqui estamos criando uma String com o comando SQL.
        try 
            (Statement stmt = this.conn.createStatement()) //utilizamos um objeto Statement para realizar a operacao
        {
                if(stmt.executeUpdate(sql) == 1){ //executa o DELETE
                    JOptionPane.showMessageDialog(null, "Ator exclu�do com sucesso!");
                }
                
                stmt.close();  //nao podemos esquecer de liberar este recurso
                    
        } catch (SQLException ex) { //se a conex�o falhar, emite a mensagem abaixo
            System.out.println("SQLException em excluir!!!" + "Erro detectado: " + ex.getMessage());
        }
        //como utiliza try-with-resource o recurso stmt � fechado automaticamente

    }
    
    /**
     
     * @param ator 
     */
    public void alterar(Ator ator){
        String sql = "UPDATE ator SET " +         //aqui estamos criando uma String com o comando SQL.
                        "nom_ator" +
                        "WHERE cod_ator=?";
        
        try
            (PreparedStatement pstmt = this.conn.prepareStatement(sql))  //utilizamos um objeto PreparedStatement para realizar a operacao
        {
                pstmt.setString(1,ator.getNome_ator());   //chamamos o metodo apropriado do objeto PreparedStatement para preparar a execucao do comando SQL
               
            
        }catch(SQLException ex){  //se a conex�o falhar, emite a mensagem abaixo
          System.out.println("SQLException em alterar!!!" + "Erro detectado: " + ex.getMessage());
          
          //como utiliza try-with-resource o recurso stmt � fechado automaticamente
      }
        
    }
    
    /**
    
     * @param nome
     * @return ArrayList de objetos da classe Contato
     */
    public ArrayList<Ator> consultar(String nome){
        
         String sql = "SELECT * FROM ator WHERE nom_ator " + "LIKE '" + nome + "%' ORDER BY nom_ator";  //aqui estamos criando uma String com o comando SQL.
        ArrayList<Ator> atores = new ArrayList<>(); //constrói um objeto da classe ArrayList, um array automaticamente dimensionável em tempo de execução
        Ator ator; //declara uma variável para receber um objeto da classe Contato
        
        try
            (Statement stmt = this.conn.createStatement(); //utilizamos um objeto Statement para realizar a operação
             ResultSet rs = stmt.executeQuery(sql);) //executamos o método executeQuery do objeto PreparedStatement no banco de dados e
                                                     //ele nos retorna um objeto ResultSet, com todos os dados retornados da consulta.
        {
            while (rs.next()) { //move o cursor para a próxima linha do ResultSet, varrendo todo o objeto ResultSet
                ator = new Ator(); //esvazia o objeto contato
               ator.setNome_ator(rs.getString("nom_ator")); //insere os valores do resultSet
                
                
                atores.add(ator); //insere um contato no arrayList
            }
                stmt.close();   //não podemos esquecer de liberar este recurso
                rs.close();     //não podemos esquecer de liberar este recurso
                return atores; //retorna o arrayList
        } catch (SQLException ex) { //se a conexão falhar, emite a mensagem abaixo
            System.out.println("SQLException em consultar!!!" + "Erro detectado: " + ex.getMessage());
            return null;


            //como utiliza try-with-resource o recurso stmt  fechado automaticamente
        }
         
    }
    
    /**
    
     * @param tbConsultar 
     */
    public ArrayList<Ator> listar(){
       
      String sql = "SELECT * FROM ator ORDER BY nom_ator";
        
        ArrayList<Ator> atores = new ArrayList<>(); //constrói um objeto da classe ArrayList, um array automaticamente dimensionável em tempo de execução
        Ator ator; //declara uma variável para receber um objeto da classe Contato
        
        try
            (Statement stmt = this.conn.createStatement(); //utilizamos um objeto Statement para realizar a operação
             ResultSet rs = stmt.executeQuery(sql);) //executamos o método executeQuery do objeto PreparedStatement no banco de dados e
                                                     //ele nos retorna um objeto ResultSet, com todos os dados retornados da consulta.
        {
            while (rs.next()) { //move o cursor para a próxima linha do ResultSet, varrendo todo o objeto ResultSet
                ator = new Ator(); //esvazia o objeto contato
                
                ator.setNome_ator(rs.getString("nom_ator"));
                ator.setCod_ator(rs.getLong("cod_ator"));
                atores.add(ator); //insere um contato no arrayList
            }
                stmt.close();   //não podemos esquecer de liberar este recurso
                rs.close();     //não podemos esquecer de liberar este recurso
                return atores; //retorna o arrayList
        } catch (SQLException ex) { //se a conexão falhar, emite a mensagem abaixo
            System.out.println("SQLException em consultar!!!" + "Erro detectado: " + ex.getMessage());
            return null;

            
        }
    }

    public void inserir(controle.Ator ator) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    
}
